#ifndef WIDGET_H
#define WIDGET_H
extern "C"{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavdevice/avdevice.h"
#include "libavformat/avio.h"
#include "libavutil/imgutils.h"
}

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    QImage image;
    int lineSize[4];
    int videoIndex = -1;
    AVFormatContext *desktopFmtCtx = nullptr;
    AVCodecParameters *desktopCodecPara = nullptr;
    AVCodecContext* desktopCodecCtx = nullptr;
    AVPacket *packet = nullptr;
    AVFrame *frame = nullptr;
    SwsContext *imgConvertContext = nullptr;


    void initialize_ffmpeg()
    {
        // av_register_all(); 注册所有可用的文件格式和编解码器，新版本已弃用，新版本会自动注册
        avdevice_register_all(); //注册所有可用的输入和输出设备，这个很重要，没注册就用不了gdigrab等设备
        if(avformat_network_init() < 0) //初始化网络相关的组件。
        {
            fprintf(stderr, "Failed to initialize network library\n");
            exit(-1);
        }

    }

protected:
    virtual void paintEvent(QPaintEvent *event) override;
};
#endif // WIDGET_H
